使用parameter有什麼好處!!?
假設,今天我在很多個控制器裡都使用到相同的東西(路徑,數值...等等),
我就會選擇把它寫成參數,這樣一來我只要呼叫那個參數就可以得到相對應的值!!,
如果今天我要改參數的值,我不用進每一個控制器裡改,我只要改參數檔裡的參數就好了!!
對!不用懷疑! 就是這麼方便~
那可是.....參數要從哪裡生出來,要從哪裡使用呢....?
首先! 先在config資料夾底下建立一個yaml(押某)檔
接著,因為我們拿參數也是透過某個Service取得,所以必須在service.yaml檔裡導入我們所建的yaml檔才能使用,後面會提到是透過哪一個Service取得的
再來,回到我們的test.yaml設定參數囉~
那個parameters一定要給 !!!! ,再來是給予參數的id,及所要賦與的值
參數檔建置完畢,參數設定完成,也導入service.yaml,接下來就是如何把它給千呼萬喚使出來了
首先!! 我們要先依賴注入ParameterBagInterface 這個服務,對,這就是上面提到的,我們要透過它來呼叫參數,下面示範在建構子內初始化,並在Action內呼叫
class TestController extends AbstractController{
private $params;
public function __construct(ParameterBagInterface $params)
{
$this->params = $params;
}
/**
* @Route(
* "/test",
* name="test"
* )
*/
public function test(){
$myParameter=$this->params->get('system_name2')
}
}
一般狀況下,環境分為三種
1.dev 開發環境 : 可以讀取錯誤資訊,或是任何的更動,且會顯示toolbar,但如果有任何設定檔變動,
必須先清理cache(緩存) => 指令 php bin/console cache:clear ,
開發環境的讀取速度較慢
2.prod 使用者環境 : 讀取速度較快,不會顯示toolBar,如果有任何code變動,也須先清理緩存
3.test 測試環境 : 用於測試完成的控制器
要如何更改目前的環境呢 ?
首先,先到專案目錄下找尋一個名稱叫.env的檔案
找到裡面有一個參數APP_ENV,將其設定為自己想要的環境
這個環境變數會被傳入哪個檔案來執行!!? 答案是 ..... 目錄src底下的Kernel.php
裡面有四個function
1.registerBundles: 這是用來註冊Bundles的方法,可以拿到目前的環境變數
2.getProjectDir : 取得專案目錄
3.configureContainer: 用來讀取php,xml,yaml,yml..類的檔案,
讀取的順序會先從目錄為package底下的設定檔開始,
接著讀取package底下子目錄內的設定檔,
子目錄內的設定檔如果名稱與package目錄設定檔的名稱一樣,
會覆蓋掉package內的設定檔,最後一個讀取service.yaml
4.configureRoutes : 用來讀取routes目錄下的設定檔,再讀取子目錄下的設定檔,
子目錄下的設定檔一樣會蓋過route目錄下的設定檔
我知道我知道!! 講到這裡各位看官們可能頭昏的頭昏,眼花的眼花,想睡覺的想睡覺了...但沒辦法,我還是得繼續這趟小菜鳥旅程,這一篇把參數設定,參數的使用及環境變數設定的大概講了一遍,來不及把實體類講完,所以留在下一篇講,下一篇比較不會是設定類的東西了~要來說說實體類Entity和講一下php的生命週期